package animals;

import genetics.DiploidAttribute;

/**
 * Base class for every Animal
 * 
 * @author Christian Holzreuter
 * @author Nicolas Winkler
 */
public abstract class Animal {
	
	/**
	 * basically the genes of the animal
	 */
	public DiploidAttribute[] atts;
	
	/**
	 * Enumerator to store the sex of an animal.
	 * @author Christian Holzreuter
	 */
	enum Sex {
		MALE, FEMALE
	};

	/**
	 * the animal's sex; either {@link Sex.MALE} or {@link Sex.FEMALE}
	 */
	public Sex sex;

	/**
	 * Lets the animals have sexual intercourse with another animal. Returns the
	 * result (I'm talking about a young animal)
	 * 
	 * @param b
	 *            the animal to sleep with
	 * @return the child
	 */
	abstract public Animal mate(Animal b);
	
	/**
	 * gets the number of chromosomes representing the genes of the specific animal
	 * @return
	 */
	abstract public int getNChromosomes();
}
